home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 21
/
Aminet 21 (1997)(GTI - Schatztruhe)[!][Oct 1997].iso
/
Aminet
/
util
/
pack
/
RealSize.lha
/
RealSize
/
RealSize.e
< prev
next >
Wrap
Text File
|
1997-08-20
|
2KB
|
101 lines
/* RealSize v1.0 by Kyzer/CSG */
OPT OSVERSION=34
MODULE 'exec/memory', 'exec/libraries', 'xfdmaster', 'libraries/xfdmaster'
DEF ret=20,err=0
PROC main()
DEF args:PTR TO LONG,rdargs=0,mem,len,reallen,fh,bi,cmd[200]:STRING,
varname, filename=0
xfdmasterbase:=OpenLibrary('xfdmaster.library',37)
args:=[0,0]; varname:='RealSizeError'
IF KickVersion(36)
IF rdargs:=ReadArgs('FILE/A,NE=NOEXTERN/S',args,NIL)
filename:=args[0]
ENDIF
ELSE
filename:=arg
ENDIF
IF filename
IF (len:=FileLength(filename))>0
reallen:=len
ret:=5
IF mem:=AllocMem(len,MEMF_PUBLIC)
IF fh:=Open(filename,OLDFILE)
IF (reallen:=Read(fh,mem,len))<>-1
Close(fh)
IF xfdmasterbase
IF bi:=XfdAllocObject(XFDOBJ_BUFFERINFO)
reallen:=decr(bi,args[1],mem,reallen)
XfdFreeObject(bi)
ELSE
err:='can\at allocate XFD buffer'
ENDIF
ELSE
err:='can\at open xfdmaster.library'
ENDIF
ELSE
err:='read error'
ENDIF
ELSE
err:='can\at open file'
ENDIF
FreeMem(mem,len)
ELSE
err:='out of memory'
ENDIF
WriteF('\d\n',reallen)
ELSE
err:='can\at examine file'
ENDIF
IF rdargs THEN FreeArgs(rdargs)
ELSE
err:='bad args'
ENDIF
IF err
IF KickVersion(36)
SetVar(varname,err,-1,0)
ELSE
/* 1.3 compatible method */
StringF(cmd,'set \s "\s"',varname,err)
Execute(cmd,0,0)
ENDIF
ENDIF
IF xfdmasterbase THEN CloseLibrary(xfdmasterbase)
ENDPROC ret
PROC decr(bufinf:PTR TO xfdbufferinfo,noextern,mem,len)
bufinf.sourcebuffer:=mem
bufinf.sourcebuflen:=len
bufinf.flags:=IF noextern THEN 0 ELSE XFDFB_RECOGEXTERN
IF XfdRecogBuffer(bufinf)
IF 0=(bufinf.packerflags AND (XFDPFF_PASSWORD OR XFDPFF_KEY16 OR XFDPFF_KEY32))
IF bufinf.packerflags AND XFDPFF_RECOGLEN
ret:=0
RETURN bufinf.finaltargetlen
ELSE
bufinf.targetbufmemtype:=MEMF_PUBLIC
IF XfdDecrunchBuffer(bufinf)
FreeMem(bufinf.targetbuffer,bufinf.targetbuflen)
ret:=0
RETURN bufinf.targetbufsavelen
ELSE
err:='couldn\at decrunch file'
ENDIF
ENDIF
ELSE
err:='file needs password or key'
ENDIF
ELSE
err:='not crunched/unknown cruncher'
ENDIF
ENDPROC len